home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
Book Chapters
/
13 - PowerPC
/
Optimize 3
/
Blitter.c
next >
Wrap
Text File
|
1995-03-07
|
4KB
|
175 lines
/*********************/
/* BLITTER.C */
/*********************/
//
// This file contains the "poor man's profiler" and
// the screen blitter routine.
//
/****************************/
/* EXTERNALS */
/****************************/
extern Ptr gScreenAddr,gDrawBufferPtr;
extern long gScreenRowBytes;
/****************************/
/* PROTOTYPES */
/****************************/
void ProfileIt(void);
static void BlitBufferToScreen(void);
/****************************/
/* CONSTANTS */
/****************************/
/****************************/
/* VARIABLES */
/****************************/
/********************* PROFILE IT *********************/
//
// Calls the blitter routine 1000 times and does a
// beep at the beginning and end so you can time in
// on a stopwatch.
//
void ProfileIt(void)
{
long i;
SysBeep(0); // MAKE 1ST BEEP SOUND
for (i=0; i < 1000L; i++) // blit the buffer 1000 times
BlitBufferToScreen();
SysBeep(0); // MAKE 2ND BEEP SOUND
}
/*************** BLIT BUFFER TO SCREEN ****************/
//
// This is a partially optimized blitter routine which
// will blit the 640x480 buffer to the screen.
//
// This has been optimized by using doubles to copy 8 bytes
// of data at a time.
//
// On a PowerMac 6100/60 it takes approximately 14 seconds
// to execute this 1000 times.
//
static void BlitBufferToScreen(void)
{
long y,rowBytes;
double *destPtr,*srcPtr;
srcPtr = (double *)gDrawBufferPtr; // get ptr to start of buffer
destPtr = (double *)gScreenAddr; // get ptr to start of scan line
rowBytes = gScreenRowBytes/8; // calc rowBytes in terms of doubles
for(y=480; y ; y--)
{
destPtr[0] = srcPtr[0];
destPtr[1] = srcPtr[1];
destPtr[2] = srcPtr[2];
destPtr[3] = srcPtr[3];
destPtr[4] = srcPtr[4];
destPtr[5] = srcPtr[5];
destPtr[6] = srcPtr[6];
destPtr[7] = srcPtr[7];
destPtr[8] = srcPtr[8];
destPtr[9] = srcPtr[9];
destPtr[10] = srcPtr[10];
destPtr[11] = srcPtr[11];
destPtr[12] = srcPtr[12];
destPtr[13] = srcPtr[13];
destPtr[14] = srcPtr[14];
destPtr[15] = srcPtr[15];
destPtr[16] = srcPtr[16];
destPtr[17] = srcPtr[17];
destPtr[18] = srcPtr[18];
destPtr[19] = srcPtr[19];
destPtr[20] = srcPtr[20];
destPtr[21] = srcPtr[21];
destPtr[22] = srcPtr[22];
destPtr[23] = srcPtr[23];
destPtr[24] = srcPtr[24];
destPtr[25] = srcPtr[25];
destPtr[26] = srcPtr[26];
destPtr[27] = srcPtr[27];
destPtr[28] = srcPtr[28];
destPtr[29] = srcPtr[29];
destPtr[30] = srcPtr[30];
destPtr[31] = srcPtr[31];
destPtr[32] = srcPtr[32];
destPtr[33] = srcPtr[33];
destPtr[34] = srcPtr[34];
destPtr[35] = srcPtr[35];
destPtr[36] = srcPtr[36];
destPtr[37] = srcPtr[37];
destPtr[38] = srcPtr[38];
destPtr[39] = srcPtr[39];
destPtr[40] = srcPtr[40];
destPtr[41] = srcPtr[41];
destPtr[42] = srcPtr[42];
destPtr[43] = srcPtr[43];
destPtr[44] = srcPtr[44];
destPtr[45] = srcPtr[45];
destPtr[46] = srcPtr[46];
destPtr[47] = srcPtr[47];
destPtr[48] = srcPtr[48];
destPtr[49] = srcPtr[49];
destPtr[50] = srcPtr[50];
destPtr[51] = srcPtr[51];
destPtr[52] = srcPtr[52];
destPtr[53] = srcPtr[53];
destPtr[54] = srcPtr[54];
destPtr[55] = srcPtr[55];
destPtr[56] = srcPtr[56];
destPtr[57] = srcPtr[57];
destPtr[58] = srcPtr[58];
destPtr[59] = srcPtr[59];
destPtr[60] = srcPtr[60];
destPtr[61] = srcPtr[61];
destPtr[62] = srcPtr[62];
destPtr[63] = srcPtr[63];
destPtr[64] = srcPtr[64];
destPtr[65] = srcPtr[65];
destPtr[66] = srcPtr[66];
destPtr[67] = srcPtr[67];
destPtr[68] = srcPtr[68];
destPtr[69] = srcPtr[69];
destPtr[70] = srcPtr[70];
destPtr[71] = srcPtr[71];
destPtr[72] = srcPtr[72];
destPtr[73] = srcPtr[73];
destPtr[74] = srcPtr[74];
destPtr[75] = srcPtr[75];
destPtr[76] = srcPtr[76];
destPtr[77] = srcPtr[77];
destPtr[78] = srcPtr[78];
destPtr[79] = srcPtr[79];
destPtr += rowBytes; // skip to next scan line
srcPtr += 80;
}
}